﻿using System;
using System.Linq;
using System.Windows;

using Microsoft.Phone.Shell;

using Finance.Entites;
using Finance.Service;
using Finance.Service.Factory;
using Finance.Service.Interfaces;
using Finance.UI.ViewModels;

namespace Finance.UI
{
    public partial class App : Application
    {
        #region DataStore Properties

        private static IDataStore<Charge> _ChargeDataStore = DataStoreService.DataStoreFactory.GetChargeDataStore();
        public static IDataStore<Charge> ChargeDataStore
        {
            get
            {
                return _ChargeDataStore;
            }
        }

        private static IDataStore<Setting> _SettingDataStore = DataStoreService.DataStoreFactory.GetSettingDataStore();
        public static IDataStore<Setting> SettingDataStore
        {
            get
            {
                return _SettingDataStore;
            }
        }

        private static IDataStore<Account> _AccountDataStore = DataStoreService.DataStoreFactory.GetAccountDataStore();
        public static IDataStore<Account> AccountDataStore
        {
            get
            {
                return _AccountDataStore;
            }
        }

        private static IDataStore<PayoutClassification> _PayoutClassificationDataStore = DataStoreService.DataStoreFactory.GetPayoutClassificationDataStore();
        public static IDataStore<PayoutClassification> PayoutClassificationDataStore
        {
            get
            {
                return _PayoutClassificationDataStore;
            }
        }

        private static IDataStore<IncomeClassification> _IncomeClassificationDataStore = DataStoreService.DataStoreFactory.GetIncomeClassificationDataStore();
        public static IDataStore<IncomeClassification> IncomeClassificationDataStore
        {
            get
            {
                return _IncomeClassificationDataStore;
            }
        }

        private static IDataStore<Project> _ProjectDataStore = DataStoreService.DataStoreFactory.GetProjectDataStore();
        public static IDataStore<Project> ProjectDataStore
        {
            get
            {
                return _ProjectDataStore;
            }
        }

        private static IDataStore<Trader> _TraderDataStore = DataStoreService.DataStoreFactory.GetTraderDataStore();
        public static IDataStore<Trader> TraderDataStore
        {
            get
            {
                return _TraderDataStore;
            }
        }

        #endregion

        #region Other Global Properties

        public static string ReturnLastUri { get; set; }
        public static PayoutCharge CurrentPayoutCharge { get; set; }
        public static IncomeCharge CurrentIncomeCharge { get; set; }

        public class ChargeDetailAssitantor
        {
            static ChargeDetailAssitantor()
            {
                //CurrentPayoutCharge = InitialPayoutChargeDetail();
                //CurrentIncomeCharge = InitialIncomeChargeDetail();
            }

            public static PayoutCharge InitialPayoutChargeDetail()
            {
                var payoutCharge = new PayoutCharge();

                payoutCharge.Account = App.AccountDataStore.Items.SingleOrDefault(
                    item => item.Name == App.SettingDataStore.Items.First().AccountName);
                payoutCharge.Classification = App.PayoutClassificationDataStore.Items.SingleOrDefault(
                    item => item.Name == App.SettingDataStore.Items.First().PayoutClassificationName);
                payoutCharge.SellerName = App.TraderDataStore.Items.SingleOrDefault(
                    item => item.Name == App.SettingDataStore.Items.First().TraderName).Name;
                payoutCharge.Project = App.ProjectDataStore.Items.SingleOrDefault(
                    item => item.Name == App.SettingDataStore.Items.First().ProjectName);

                return payoutCharge;
            }

            public static IncomeCharge InitialIncomeChargeDetail()
            {
                var incomeCharge = new IncomeCharge();

                incomeCharge.Account = App.AccountDataStore.Items.SingleOrDefault(
                    item => item.Name == App.SettingDataStore.Items.First().AccountName);
                incomeCharge.Classification = App.IncomeClassificationDataStore.Items.SingleOrDefault(
                    item => item.Name == App.SettingDataStore.Items.First().IncomeClassificationName);
                incomeCharge.Project = App.ProjectDataStore.Items.SingleOrDefault(
                    item => item.Name == App.SettingDataStore.Items.First().ProjectName);

                return incomeCharge;
            }
        }

        #endregion
    }
}
